/*
 * iniciar_praid.c
 *
 *  Created on: 15/11/2011
 *      Author: utn_so
 */


#include "../includes/praid.h"
#include "includes/todo_incluido.h"


/***********************************************************************
FUNCION: LeerArchivoDeConfiguracion
PROCESO: PRAID
Autor: Cristian Rios
PRE: ninguna
POST: Se obtienen los valores para los parametros que se desean leer desde el archivo de configuracion
DEVUELVE: un entero indicando el valor para cada parametros deseado (Puerto, Consola, y Tamanio del pool de conexiones)
Devuelve EXIT_FAILURE en caso de que el archivo de configuracion esté vacio o no exista el/los parametros buscados.
FUNCION PPAL: Leer lineas de texto desde un archivo de texto y obtener valores para cada parametro buscado.
**********************************************************************/
void LeerArchivoDeConfiguracion (config *param_cfg){
	FILE *cfg;


	if ((cfg = fopen(ARCH_CONFIG, "r")) != NULL) {
		uint8_t error = 0;

		param_cfg->v_consola = atoi(LeerParametroDeConfiguracion(DELIMITADOR_CONSOLA, cfg, &error));
		param_cfg->v_puerto = atoi(LeerParametroDeConfiguracion(DELIMITADOR_PUERTO, cfg, &error));
		param_cfg->v_pool = atoi(LeerParametroDeConfiguracion(DELIMITADOR_POOL, cfg, &error));


		if (error == 1) {
			printf("Parametro/s no encontrado/s en el archivo de configuracion\n");
			exit(EXIT_FAILURE);
		}
	} else {
		printf("No se encuentra el archivo \"settings.cfg\"\n");
		exit(EXIT_FAILURE) ;
		}

		printf("El puerto es: %d\n", param_cfg->v_puerto);
		printf("Se creara un pool de %d conexiones\n", param_cfg->v_pool);
			if (param_cfg->v_consola == 1){
				printf("Consola: Habilitada\n");
			}	else  printf("Consola: Deshabilitada\n");
	fclose (cfg);
	printf("######################################\n");


}

/***********************************************************************
FUNCION: InicializarArrayDeConexiones
PROCESO: PRAID
Autor: Cristian Rios
PRE: Haber obtenido la cantidad máxima de conexiones desde el archivo de configuración
POST: queda inicializado el array de conexiones con el PFS para encolar nuevos pedidos.
DEVUELVE: void
FUNCION PPAL: inicializar un array del tipo struct arrConexiones.
**********************************************************************/
/*
void InicializarArrayDeConexiones(uint16_t cant, struct arrConexiones *array, config param_cfg){
	uint16_t i;
	int iSock;
	int resultado;
	struct sockaddr_in addr;

	for (i = 0; i < cant; i++)
		{

				addr.sin_family = AF_INET;
				addr.sin_addr.s_addr = INADDR_ANY;
				addr.sin_port=htons(param_cfg.v_puerto);

				bzero ( &(addr.sin_zero), 8);

				iSock = socket ( AF_INET, SOCK_STREAM, 0);
				printf("El socket es el numero %d\n", iSock);
				if (iSock == -1) {
					printf("ERROR AL CREAR SOCKET");
					close(iSock);
					exit(1);
				}

				resultado = bind(iSock, (struct sockaddr*) &addr, sizeof(addr));
				if (resultado == -1) {
						printf("ERROR AL UNIR EL SOCKET");
						close(iSock);
						exit(1);
				}

				char *some_addr;
				some_addr = inet_ntoa (addr.sin_addr);

				printf(" Direccion IP del socket %d ", iSock);
				printf("es: %s ", some_addr);
				printf("y numero de puerto: %d\n",param_cfg.v_puerto);

				*(array[i].sockId) = iSock;
				array[i].estado = LIBRE;
				array[i].cola = NULL;
			}
}
*/


//Funcion alternativa
void InicializarArrayDeConexiones(uint16_t cant, struct arrConexiones *array, config param_cfg){
	uint16_t i;
	for (i = 0; i < cant; i++)
		{
				array[i].sockId = 0;
				array[i].estado = LIBRE;
				array[i].cola = NULL;


			}
}



